Instalar entorno de desarrollo en WSL

Introducción

A continuación se explica como instalar un entorno de desarrollo (docker, angular, python) dentro de wsl, para hacer que el ordenador tenga un mejor rendimiento.

El problema

No sé decir cual es la causa raiz del problema exactamente, pero está claramente relacionada con el sistema de archivos, siempre que se intenta ejecutar algo en nuestro entorno de windows hay algún tipo de monitorización en el sistema de archivos(probablemente el antivirus o algo por el estilo) que hace que la ejecución vaya mas lenta.

El truco de todo esto es que desde el sistema de archivos interno del WSL no se da este problema y la ejecución es mucho más rapida. Incluso si estamos dentro del WSL y ejecutamos comandos que hacen uso del sistema de archivos anfitrion (la particion montada en /mnt/c/) seguiremos teniendo estos problemas de rendimiento, el truco es usar solo el sistema de archivos interno de la maquina montada en WSL. Los problemas de rendimiento se acentuan sobre todo con lenguajes de scripting, node, python...etc

Para utilizar solo el sistema de archivos interno instalaremos todo nuestro entorno de desarrollo dentro de la maquina de WSL y programaremos directamente dentro de dicha maquina, solo tendremos que conectar el VSCode a la maquina que hay dentro de WSL y podremos hacerlo funcionar todo de manera transparente.

Mini-trucos para el rendimiento

A pesar de que la solución principal es utilizar WSL os dejo aqui un par de trucos para cargar menos el ordenador:

Cambiar la resolución

La resolución que trae por defecto el surface es altísima, podemos bajar la resolución para que el sistema tenga menos carga.

Por defecto la resolución es 2256x1504 con un aumento del 150%, para mantener la relación de aspecto de la pantalla podeis coger la resolucion 1620x1080 con aumento al 100%.

La diferencía es inapreciable, pero el rendimiento del ordenador será mejor ya que tiene que procesar mucho menos.

Dejarlo enchufado a la corriente

Esto pasa con todos los portatiles, cuando se desconectan del cargador y se deja solo con la batería el sistema limita el procesador para alargar la duración de la bateria, si quereis tener mas rendimiento dejarlo enchufado al cargador.

Instalar WSL

Lo primero es instalar WSL, podeis ver todos los detalles en la página de microsoft:

Install WSL

Básicamente lo único que hay que hacer es abrir un terminal como administrador y lanzar el comando:

wsl --install

Por defecto instala una distribución de ubuntu, yo estoy usando la versión 20.04 LTS

Al finalizar el proceso de instalación igual ya os entra directamente en la maquina virtual que os instale, podeis salir tecleando el comando "exit"

Comprobar WSL2

Es importante que la maquina que estemos usando esté con la versión 2 de WSL, para comprobar esto lanzamos el siguiente comando desde una terminal de windows:

wsl -l -v

Deberíamos de ver algo como esto:

Si vemos que tenemos la version 1, tenemos que cambiarla, usaríamos el siguiente comando:

wsl --set-version Ubuntu 2

El proceso le puede llevar un par de minutos...

Realizar configuraciones de archivos

Una vez tengamos instalado WSL y configurada la versión 2, tenemos que configurar una serie de archivos dentro de nuestra maquina virtual.

Accedemos a nuestra maquina de WSL (ubuntu en mi caso), ejecutamos el siguiente comando en una consola:

wsl

Si solo tenemos una maquina instalada no hace falta indicar ningún parámetro, WSL iniciará nuestra maquina por defecto, si tenemos varías maquinas podemos indicar el nombre de la distribución como segundo parámetro y se lanzará la que indiquemos (podemos consultar la lista de todas las distribuciones instaladas con el comando wsl -l -v).

Una vez dentro de nuestra maquina tendremos que editar varios archivos, podemos hacer con vim, nano o cualquier otro editor de archivos.

Archivos a editar

Despues de haber hecho todos los cambios tenemos que reiniciar la maquina, salimos con exit y volvemos a entrar con el comando wsl

Una vez hecho todo esto solo nos queda instalar los entornos de programación que utilicemos, en este caso instalaré: Angular, Python y Docker

Instalación de git

Comprobad si teneis instalado git en la maquina virtual, si no lo teneis instalado podeis instalarlo con el siguiente comando:

sudo apt-get install git
Abrir VSCode

Para abrir el VSCode conectado a nuestra maquina virtual solo tenemos que lanzar el siguiente comando dentro de nuestra maquina virtual:

code .

Ese comando abrirá el VSCode en la carpeta actual, podemos indicarle como parámetro un archivo de workspace si queremos.

Desde el VSCode todas las terminales que abramos serán terminales dentro de la propia maquina virtual, de manera que podemos trabajar directamente con las terminales en VSCode sin tener que usar el cmd para ejecutar otros comandos.

Instalación de Angular

Para instalar Angular ejecutamos los siguientes comandos:

curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
sudo npm install -g npm@latest sudo npm install -g @angular/cli@latest
Instalación de Python

Para instalar Python ejecutamos los siguientes comandos:

sudo apt install software-properties-common -y sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt install python3.10

Una vez instalado todo esto abrimos nuestro VSCode (con el comando code desde la maquina virtual), e instalamos la siguiente extensión para poder código de python:

Si ya teniamos alguna versión de python3 instalada tendremos que actualizar el enlace simbolico:

cd /usr/bin/ sudo rm python3 sudo ln ls python3.10 python

Instalarción Poetry

Para instalar poetry y configurarlo en el VSCode lo hacemos asi:

Ejecutamos el siguiente comando:

curl -sSL https://install.python-poetry.org | python3 -

En la carpeta de nuestro proyecto ejecutamos el comando:

poetry install

Lanzamos el siguiente comando para obtener el interprete virtual:

poetry env info

Cogemos la linea Executable y en nuestro VSCode pulsamos F1 y buscamos la opción "python interpreter" y añadimos el interprete que hemos obtenido con el comando anterior, con esto nuestro proyecto ya está listo para ser lanzado desde el VSCode.

Instalación de Docker

Si queremos instalar docker en nuestro WSL ejecutamos los siguientes comandos:

sudo apt-get update
sudo apt-get install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose sudo service docker start sudo groupadd docker sudo usermod -aG docker $USER

Si queremos que el servicio de docker se inicie de manera automática al arrancar nuestra maquina virtual podemos añadir la siguiente configuración en el archivo ~/.profile (el archivo .profile de nuestra carpeta de usuario):

wsl.exe -u root -e sh -c "service docker status || service docker start"
Acceso a los archivos de WSL desde windows

Para acceder mas comodamente al sistema de archivos interno de WSL podemos hacerlo de dos maneras:

Desde el explorador de archivos

Podemos acceder al sistema de archivos usando la siguiente dirección en el explorador de archivos:

\\wsl$

De esta manera podemos acceder al sistema entero (solo es una ubicación de red), y tratarlo como si fuese una carpeta más del sistema, podemos crear accesos directos a las carpetas donde tengamos nuestros proyectos si queremos.

Desde VSCode

Para esto tendremos que instalar la siguiente extensión:

Una vez instalada podemos acceder al sistema de archivos desde la siguiente opción del IDE

De igual manera que con el explorador de archivos podemos acceder a todo el contenido de la maquina virtual, pero en este caso directamente desde el propio VSCode.

Quitar el sonido molesto de la campana

El WSL tiene un sonido constante de la campana del sistema, cada vez que tabulas o pulsas backspace y no hay nada que borrar se emite el sonido, que puede llegar a ser muy molesto, se puede desactivar de la siguiente manera:

Para eliminarlo de manera general lo hacemos editando el archivo /etc/inputrc, añadimos la opción:

set bell-style none

Quitar el sonido en Vim: editamos el archivo ~/.vimrc añadiendo el siguiente contenido:

set visualbell
set t_vb=

Quitar el sonido en less: editamos el archivo ~/.profile añadiendo la siguiente linea:

export LESS="$LESS -R -Q"